#include <stdio.h>

int main()
{
    // = : 赋值运算符 
    // 变量初始化：在变量定义时进行赋值
    // 变量一定要初始化 ： 不初始化很可能有垃圾值 
    
    //int a = 0;
    //a = 10;
    //printf("%d\n",a);

    //  +  -  *  /
    //int a = 7;
    //int b = 2;
    //   /  整除   向下取整
    //float c =  1.0 * a /  1.0 * b;
    // 小数除法：  在前面加1.0 * 
    //printf("%d\n",c);
     
    //  % 取余符号
    //int c = a % b;
    //printf("%d\n",c); 

    // +=   -=  *=   /=   %=   
    
    // a += 1; // a = a + 1;

    // int a = 7;
    // int b = 2;
    // b +=a += a;  // 连续赋值中：从右往左
    
    // printf("%d %d\n", a,b);

    //  ++    --
    // int a = 1;
    // int b = a++;      //  a++ 的含义是先给出a的值  再自增1
    
    // int b = ++a;       //  ++a 的含义是先自增1  再给出a（变量本身）
    
    // int b = a++ + a++;   //  a++ + a++    

    
    // printf ("%d\n %d\n",a,b);
    

    //  位运算符 ： 能计算到二进制位的运算符

    //  与  或   异或  
    //  & : 按位与 ：可以把某些位 置0   （与到 0 就变 0）
    //  1 & 1 = 1
    //  1 & 0 = 0
    //  0 & 0 = 0
    
    // int a = 7 ;
    // printf("%d\n",a & ( a - 1 ) );
    
    // | : 按位或 : 把某些位 置1    （或到 1 就变 1 ）
    // 1 | 1 = 1
    // 1 | 0 = 1
    // 0 | 0 = 0


    //  ^ :按位异或： 相异为 1  相同为 0
    // 1 ^ 1 = 0 
    // 1 ^ 0 = 1
    // 0 ^ 0 = 1
 
    // 交换两个变量的值
    // int a = 1;
    // int b = 2;
    
    // 引入第三个变量  交换
    // int c = a;
    // a = b ;
    // b = c ;
    // printf ("a = %d b = %d\n",a,b);

    // 算数法
    // a = a - b;
    // b = a + b;
    // a = b - a;
    // printf ("a = %d b = %d\n",a,b);

    // 异或法   
    // a = a ^ b;
    // b = a ^ b;
    // a = a ^ b;

    // ~ 取反   ：所有位都要取反，包括符号位

    //printf("%d\n",~0);

    // printf("d\n",1<<1); // 低位补0   也就是说左移 就是 *2
    // printf("d\n",1>>1); // 

    //求两个数的平均数
    
    //算数法
    //int a = 7 ;
    //int b = 5 ;
    //int c = a + (b - a ) / 2;
    //printf("%d\n",c);
    
    // 位操作法
    // int a = 7 ;
    // int b = 5 ;
    // int c = ( a & b) + ((a ^ b) >> 1);    
    
    // a&b：取相同位上的平均数   
    // (a^b)>>1: 取不同位上的平均数
    // printf("%d\n",c);

    //  &  |   ^    ~    <<    >>
    
    
    
    
    
    
    
    
    //逻辑运算符：判断真和假的符号
    //   ==判断相等的符号     >   <    <=   >=  !=

    // printf("$d\n", 1 == 1 );  //  1代表真     0 代表假   
    
    //  && :左右两边表达式同时成立，则结果为真  
    //  || ：左右两边表达式有一边成立，结果为真
    
    //printf("%d\n",(1 != 0) && ( 1 > 0 ) );
    
     // 非0 就是真

    //经典例题
    // int a = -1;
    // int b = 0;
    // int c = 1;
    // 短路执行 
    // 当 && 的左边已经为 假，右边不再执行（&&此时一定为假）
    // 当 || 的左边已经为 真，右边不再执行（||此时一定为真）
    
    //int d = ++a || --b && --c; 
    
    //printf("a = %d\n  b = %d\n  c = %d\n  d = %d\n ",a,b,c,d);

    //  ! 非： 假变真    真变假
    // printf("%d\n",!-1);  //  ！0 为 1   ！其他 都是 0
    
    
    
    int a = 1;
    int b = 2;
   
    // 表达式 ？ a ；b  意思是表达式成立则结果为 a ，否则结果为 b  
    int c = a > b ? a : b ;
    // (a>b?a:b ) += 1 ; //三目运算符给的是值，没有办法给它赋其他值

    printf("%d\n",c);
    
    return 0;
}